{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 用户指南\n",
    "\n",
    "用户指南按主题区域涵盖所有熊猫。每个小节都介绍了一个主题（例如\"处理缺失的数据\"），并讨论了熊猫如何处理这个问题，并举了很多例子。\n",
    "\n",
    "**pandas** 官方文档 : https://pandas.pydata.org/pandas-docs/stable/user_guide/index.html#user-guide"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 10 分钟体验pandas\n",
    "\n",
    "这是熊猫的简短介绍，主要面向新用户。你可以在教程中看到更复杂的数据操作.\n",
    "\n",
    "按照惯例，我们演示如下：\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "\n",
    "import pandas as pd"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 对象创建\n",
    "通过传递值列表创建 Series ，让 pandas 创建默认整数索引："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0    1.0\n",
       "1    3.0\n",
       "2    5.0\n",
       "3    NaN\n",
       "4    6.0\n",
       "5    8.0\n",
       "dtype: float64"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "s = pd.Series([1, 3, 5, np.nan, 6, 8])\n",
    "s"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "通过 NumPy 阵列创建DataFrame，其中带有日期时间索引和标记列："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "DatetimeIndex(['2013-01-01', '2013-01-02', '2013-01-03', '2013-01-04',\n",
       "               '2013-01-05', '2013-01-06'],\n",
       "              dtype='datetime64[ns]', freq='D')"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dates = pd.date_range(\"20130101\", periods=6)\n",
    "dates"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2013-01-01</th>\n",
       "      <td>-0.694882</td>\n",
       "      <td>-0.019432</td>\n",
       "      <td>0.585831</td>\n",
       "      <td>-0.381029</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-02</th>\n",
       "      <td>0.678495</td>\n",
       "      <td>0.971696</td>\n",
       "      <td>1.112416</td>\n",
       "      <td>-0.569820</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-03</th>\n",
       "      <td>-0.419630</td>\n",
       "      <td>0.090373</td>\n",
       "      <td>-1.025176</td>\n",
       "      <td>-0.841699</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-04</th>\n",
       "      <td>-0.374271</td>\n",
       "      <td>0.122785</td>\n",
       "      <td>-0.591558</td>\n",
       "      <td>-1.617607</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-05</th>\n",
       "      <td>-0.795299</td>\n",
       "      <td>0.987344</td>\n",
       "      <td>0.355418</td>\n",
       "      <td>-0.430621</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-06</th>\n",
       "      <td>-0.419522</td>\n",
       "      <td>0.692337</td>\n",
       "      <td>-0.111968</td>\n",
       "      <td>-0.302903</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   A         B         C         D\n",
       "2013-01-01 -0.694882 -0.019432  0.585831 -0.381029\n",
       "2013-01-02  0.678495  0.971696  1.112416 -0.569820\n",
       "2013-01-03 -0.419630  0.090373 -1.025176 -0.841699\n",
       "2013-01-04 -0.374271  0.122785 -0.591558 -1.617607\n",
       "2013-01-05 -0.795299  0.987344  0.355418 -0.430621\n",
       "2013-01-06 -0.419522  0.692337 -0.111968 -0.302903"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.DataFrame(np.random.randn(6, 4), index=dates, columns=list(\"ABCD\"))\n",
    "df"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "通过传递可转换为类似系列的对象的听写来创建DataFrame。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "      <th>E</th>\n",
       "      <th>F</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.0</td>\n",
       "      <td>2013-01-02</td>\n",
       "      <td>1.0</td>\n",
       "      <td>3</td>\n",
       "      <td>test</td>\n",
       "      <td>foo</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1.0</td>\n",
       "      <td>2013-01-02</td>\n",
       "      <td>1.0</td>\n",
       "      <td>3</td>\n",
       "      <td>train</td>\n",
       "      <td>foo</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1.0</td>\n",
       "      <td>2013-01-02</td>\n",
       "      <td>1.0</td>\n",
       "      <td>3</td>\n",
       "      <td>test</td>\n",
       "      <td>foo</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1.0</td>\n",
       "      <td>2013-01-02</td>\n",
       "      <td>1.0</td>\n",
       "      <td>3</td>\n",
       "      <td>train</td>\n",
       "      <td>foo</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     A          B    C  D      E    F\n",
       "0  1.0 2013-01-02  1.0  3   test  foo\n",
       "1  1.0 2013-01-02  1.0  3  train  foo\n",
       "2  1.0 2013-01-02  1.0  3   test  foo\n",
       "3  1.0 2013-01-02  1.0  3  train  foo"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df2 = pd.DataFrame(\n",
    "    {\n",
    "        \"A\": 1.0,\n",
    "        \"B\": pd.Timestamp(\"20130102\"),\n",
    "        \"C\": pd.Series(1, index=list(range(4)), dtype=\"float32\"),\n",
    "        \"D\": np.array([3] * 4, dtype=\"int32\"),\n",
    "        \"E\": pd.Categorical([\"test\", \"train\", \"test\", \"train\"]),\n",
    "        \"F\": \"foo\",\n",
    "    }\n",
    ")\n",
    "df2"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "生成DataFrame的列具有不同的 DataFram类型."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "A           float64\n",
       "B    datetime64[ns]\n",
       "C           float32\n",
       "D             int32\n",
       "E          category\n",
       "F            object\n",
       "dtype: object"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df2.dtypes"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "如果您正在使用 IPython，则自动启用列名（以及公共属性）的选项卡完成。下面是将要完成的属性的子集：\n",
    "f2.<TAB>  # noqa: E225, E999\n",
    "    \n",
    "df2.A                  df2.bool\n",
    "    \n",
    "df2.abs                df2.boxplot\n",
    "    \n",
    "df2.add                df2.C\n",
    "    \n",
    "df2.add_prefix         df2.clip\n",
    "    \n",
    "df2.add_suffix         df2.columns\n",
    "    \n",
    "df2.align              df2.copy\n",
    "    \n",
    "df2.all                df2.count\n",
    "    \n",
    "df2.any                df2.combine\n",
    "    \n",
    "df2.append             df2.D\n",
    "    \n",
    "df2.apply              df2.describe\n",
    "    \n",
    "df2.applymap           df2.diff\n",
    "    \n",
    "df2.B                  df2.duplicated\n",
    "    \n",
    "## 查看数据\n",
    "以下是如何查看框架的顶部和底部行："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2013-01-01</th>\n",
       "      <td>-0.694882</td>\n",
       "      <td>-0.019432</td>\n",
       "      <td>0.585831</td>\n",
       "      <td>-0.381029</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-02</th>\n",
       "      <td>0.678495</td>\n",
       "      <td>0.971696</td>\n",
       "      <td>1.112416</td>\n",
       "      <td>-0.569820</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-03</th>\n",
       "      <td>-0.419630</td>\n",
       "      <td>0.090373</td>\n",
       "      <td>-1.025176</td>\n",
       "      <td>-0.841699</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-04</th>\n",
       "      <td>-0.374271</td>\n",
       "      <td>0.122785</td>\n",
       "      <td>-0.591558</td>\n",
       "      <td>-1.617607</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-05</th>\n",
       "      <td>-0.795299</td>\n",
       "      <td>0.987344</td>\n",
       "      <td>0.355418</td>\n",
       "      <td>-0.430621</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   A         B         C         D\n",
       "2013-01-01 -0.694882 -0.019432  0.585831 -0.381029\n",
       "2013-01-02  0.678495  0.971696  1.112416 -0.569820\n",
       "2013-01-03 -0.419630  0.090373 -1.025176 -0.841699\n",
       "2013-01-04 -0.374271  0.122785 -0.591558 -1.617607\n",
       "2013-01-05 -0.795299  0.987344  0.355418 -0.430621"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2013-01-04</th>\n",
       "      <td>-0.374271</td>\n",
       "      <td>0.122785</td>\n",
       "      <td>-0.591558</td>\n",
       "      <td>-1.617607</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-05</th>\n",
       "      <td>-0.795299</td>\n",
       "      <td>0.987344</td>\n",
       "      <td>0.355418</td>\n",
       "      <td>-0.430621</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-06</th>\n",
       "      <td>-0.419522</td>\n",
       "      <td>0.692337</td>\n",
       "      <td>-0.111968</td>\n",
       "      <td>-0.302903</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   A         B         C         D\n",
       "2013-01-04 -0.374271  0.122785 -0.591558 -1.617607\n",
       "2013-01-05 -0.795299  0.987344  0.355418 -0.430621\n",
       "2013-01-06 -0.419522  0.692337 -0.111968 -0.302903"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.tail(3)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "显示索引、列："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "DatetimeIndex(['2013-01-01', '2013-01-02', '2013-01-03', '2013-01-04',\n",
       "               '2013-01-05', '2013-01-06'],\n",
       "              dtype='datetime64[ns]', freq='D')"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.index"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Index(['A', 'B', 'C', 'D'], dtype='object')"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.columns"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    " DataFrame.to_numpy()提供了基础数据的 NumPy 表示。请注意，当DataFrame具有具有不同数据类型的列时，这可能是一个开销大的操作，这归结为 pandas 和 NumPy 之间的根本区别：NumPy 阵列为整个阵列提供一个 dtype，而熊猫数据帧每个列有一个 dtype。当你打电话给DataFrame.to_numpy()时，熊猫会发现NumPy dtype，它可以容纳数据帧中所有的dtype。这可能最终成为object，这需要铸造每一个值到Python对象。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[-0.69488193, -0.01943221,  0.58583132, -0.38102917],\n",
       "       [ 0.67849534,  0.97169551,  1.11241558, -0.56981995],\n",
       "       [-0.41962979,  0.0903727 , -1.0251757 , -0.84169874],\n",
       "       [-0.37427096,  0.12278471, -0.59155757, -1.61760684],\n",
       "       [-0.79529914,  0.98734405,  0.35541848, -0.43062098],\n",
       "       [-0.41952158,  0.69233673, -0.11196798, -0.30290251]])"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.to_numpy()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "对于 df2 来说，具有多个 dtype类型 DataFrame DataFrame.to_numpy()相对较贵"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[1.0, Timestamp('2013-01-02 00:00:00'), 1.0, 3, 'test', 'foo'],\n",
       "       [1.0, Timestamp('2013-01-02 00:00:00'), 1.0, 3, 'train', 'foo'],\n",
       "       [1.0, Timestamp('2013-01-02 00:00:00'), 1.0, 3, 'test', 'foo'],\n",
       "       [1.0, Timestamp('2013-01-02 00:00:00'), 1.0, 3, 'train', 'foo']],\n",
       "      dtype=object)"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df2.to_numpy()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "describe()显示数据的快速统计摘要："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>6.000000</td>\n",
       "      <td>6.000000</td>\n",
       "      <td>6.000000</td>\n",
       "      <td>6.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>-0.337518</td>\n",
       "      <td>0.474184</td>\n",
       "      <td>0.054161</td>\n",
       "      <td>-0.690613</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>0.526189</td>\n",
       "      <td>0.463226</td>\n",
       "      <td>0.787763</td>\n",
       "      <td>0.492035</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>-0.795299</td>\n",
       "      <td>-0.019432</td>\n",
       "      <td>-1.025176</td>\n",
       "      <td>-1.617607</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>-0.626069</td>\n",
       "      <td>0.098476</td>\n",
       "      <td>-0.471660</td>\n",
       "      <td>-0.773729</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>-0.419576</td>\n",
       "      <td>0.407561</td>\n",
       "      <td>0.121725</td>\n",
       "      <td>-0.500220</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>-0.385584</td>\n",
       "      <td>0.901856</td>\n",
       "      <td>0.528228</td>\n",
       "      <td>-0.393427</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>0.678495</td>\n",
       "      <td>0.987344</td>\n",
       "      <td>1.112416</td>\n",
       "      <td>-0.302903</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "              A         B         C         D\n",
       "count  6.000000  6.000000  6.000000  6.000000\n",
       "mean  -0.337518  0.474184  0.054161 -0.690613\n",
       "std    0.526189  0.463226  0.787763  0.492035\n",
       "min   -0.795299 -0.019432 -1.025176 -1.617607\n",
       "25%   -0.626069  0.098476 -0.471660 -0.773729\n",
       "50%   -0.419576  0.407561  0.121725 -0.500220\n",
       "75%   -0.385584  0.901856  0.528228 -0.393427\n",
       "max    0.678495  0.987344  1.112416 -0.302903"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.describe()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "转换数据："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>count</th>\n",
       "      <th>mean</th>\n",
       "      <th>std</th>\n",
       "      <th>min</th>\n",
       "      <th>25%</th>\n",
       "      <th>50%</th>\n",
       "      <th>75%</th>\n",
       "      <th>max</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>6.0</td>\n",
       "      <td>-0.337518</td>\n",
       "      <td>0.526189</td>\n",
       "      <td>-0.795299</td>\n",
       "      <td>-0.626069</td>\n",
       "      <td>-0.419576</td>\n",
       "      <td>-0.385584</td>\n",
       "      <td>0.678495</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>6.0</td>\n",
       "      <td>0.474184</td>\n",
       "      <td>0.463226</td>\n",
       "      <td>-0.019432</td>\n",
       "      <td>0.098476</td>\n",
       "      <td>0.407561</td>\n",
       "      <td>0.901856</td>\n",
       "      <td>0.987344</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>6.0</td>\n",
       "      <td>0.054161</td>\n",
       "      <td>0.787763</td>\n",
       "      <td>-1.025176</td>\n",
       "      <td>-0.471660</td>\n",
       "      <td>0.121725</td>\n",
       "      <td>0.528228</td>\n",
       "      <td>1.112416</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>6.0</td>\n",
       "      <td>-0.690613</td>\n",
       "      <td>0.492035</td>\n",
       "      <td>-1.617607</td>\n",
       "      <td>-0.773729</td>\n",
       "      <td>-0.500220</td>\n",
       "      <td>-0.393427</td>\n",
       "      <td>-0.302903</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   count      mean       std       min       25%       50%       75%       max\n",
       "A    6.0 -0.337518  0.526189 -0.795299 -0.626069 -0.419576 -0.385584  0.678495\n",
       "B    6.0  0.474184  0.463226 -0.019432  0.098476  0.407561  0.901856  0.987344\n",
       "C    6.0  0.054161  0.787763 -1.025176 -0.471660  0.121725  0.528228  1.112416\n",
       "D    6.0 -0.690613  0.492035 -1.617607 -0.773729 -0.500220 -0.393427 -0.302903"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.describe().T"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "按列排序："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>D</th>\n",
       "      <th>C</th>\n",
       "      <th>B</th>\n",
       "      <th>A</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2013-01-01</th>\n",
       "      <td>-0.381029</td>\n",
       "      <td>0.585831</td>\n",
       "      <td>-0.019432</td>\n",
       "      <td>-0.694882</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-02</th>\n",
       "      <td>-0.569820</td>\n",
       "      <td>1.112416</td>\n",
       "      <td>0.971696</td>\n",
       "      <td>0.678495</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-03</th>\n",
       "      <td>-0.841699</td>\n",
       "      <td>-1.025176</td>\n",
       "      <td>0.090373</td>\n",
       "      <td>-0.419630</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-04</th>\n",
       "      <td>-1.617607</td>\n",
       "      <td>-0.591558</td>\n",
       "      <td>0.122785</td>\n",
       "      <td>-0.374271</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-05</th>\n",
       "      <td>-0.430621</td>\n",
       "      <td>0.355418</td>\n",
       "      <td>0.987344</td>\n",
       "      <td>-0.795299</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-06</th>\n",
       "      <td>-0.302903</td>\n",
       "      <td>-0.111968</td>\n",
       "      <td>0.692337</td>\n",
       "      <td>-0.419522</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   D         C         B         A\n",
       "2013-01-01 -0.381029  0.585831 -0.019432 -0.694882\n",
       "2013-01-02 -0.569820  1.112416  0.971696  0.678495\n",
       "2013-01-03 -0.841699 -1.025176  0.090373 -0.419630\n",
       "2013-01-04 -1.617607 -0.591558  0.122785 -0.374271\n",
       "2013-01-05 -0.430621  0.355418  0.987344 -0.795299\n",
       "2013-01-06 -0.302903 -0.111968  0.692337 -0.419522"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.sort_index(axis=1, ascending=False)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "按值排序："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2013-01-01</th>\n",
       "      <td>-0.694882</td>\n",
       "      <td>-0.019432</td>\n",
       "      <td>0.585831</td>\n",
       "      <td>-0.381029</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-03</th>\n",
       "      <td>-0.419630</td>\n",
       "      <td>0.090373</td>\n",
       "      <td>-1.025176</td>\n",
       "      <td>-0.841699</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-04</th>\n",
       "      <td>-0.374271</td>\n",
       "      <td>0.122785</td>\n",
       "      <td>-0.591558</td>\n",
       "      <td>-1.617607</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-06</th>\n",
       "      <td>-0.419522</td>\n",
       "      <td>0.692337</td>\n",
       "      <td>-0.111968</td>\n",
       "      <td>-0.302903</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-02</th>\n",
       "      <td>0.678495</td>\n",
       "      <td>0.971696</td>\n",
       "      <td>1.112416</td>\n",
       "      <td>-0.569820</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-05</th>\n",
       "      <td>-0.795299</td>\n",
       "      <td>0.987344</td>\n",
       "      <td>0.355418</td>\n",
       "      <td>-0.430621</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   A         B         C         D\n",
       "2013-01-01 -0.694882 -0.019432  0.585831 -0.381029\n",
       "2013-01-03 -0.419630  0.090373 -1.025176 -0.841699\n",
       "2013-01-04 -0.374271  0.122785 -0.591558 -1.617607\n",
       "2013-01-06 -0.419522  0.692337 -0.111968 -0.302903\n",
       "2013-01-02  0.678495  0.971696  1.112416 -0.569820\n",
       "2013-01-05 -0.795299  0.987344  0.355418 -0.430621"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.sort_values(by=\"B\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 获取\n",
    "选择一个列，产生一个Series，相当于df.A:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2013-01-01   -0.694882\n",
       "2013-01-02    0.678495\n",
       "2013-01-03   -0.419630\n",
       "2013-01-04   -0.374271\n",
       "2013-01-05   -0.795299\n",
       "2013-01-06   -0.419522\n",
       "Freq: D, Name: A, dtype: float64"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df[\"A\"]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "通过[]进行选择，从而分割行。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2013-01-01</th>\n",
       "      <td>-0.694882</td>\n",
       "      <td>-0.019432</td>\n",
       "      <td>0.585831</td>\n",
       "      <td>-0.381029</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-02</th>\n",
       "      <td>0.678495</td>\n",
       "      <td>0.971696</td>\n",
       "      <td>1.112416</td>\n",
       "      <td>-0.569820</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-03</th>\n",
       "      <td>-0.419630</td>\n",
       "      <td>0.090373</td>\n",
       "      <td>-1.025176</td>\n",
       "      <td>-0.841699</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   A         B         C         D\n",
       "2013-01-01 -0.694882 -0.019432  0.585831 -0.381029\n",
       "2013-01-02  0.678495  0.971696  1.112416 -0.569820\n",
       "2013-01-03 -0.419630  0.090373 -1.025176 -0.841699"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df[0:3]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2013-01-02</th>\n",
       "      <td>0.678495</td>\n",
       "      <td>0.971696</td>\n",
       "      <td>1.112416</td>\n",
       "      <td>-0.569820</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-03</th>\n",
       "      <td>-0.419630</td>\n",
       "      <td>0.090373</td>\n",
       "      <td>-1.025176</td>\n",
       "      <td>-0.841699</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-04</th>\n",
       "      <td>-0.374271</td>\n",
       "      <td>0.122785</td>\n",
       "      <td>-0.591558</td>\n",
       "      <td>-1.617607</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   A         B         C         D\n",
       "2013-01-02  0.678495  0.971696  1.112416 -0.569820\n",
       "2013-01-03 -0.419630  0.090373 -1.025176 -0.841699\n",
       "2013-01-04 -0.374271  0.122785 -0.591558 -1.617607"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df[\"20130102\":\"20130104\"]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 按标签选择\n",
    "\n",
    "\n",
    "使用标签获取横截面："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "A   -0.694882\n",
       "B   -0.019432\n",
       "C    0.585831\n",
       "D   -0.381029\n",
       "Name: 2013-01-01 00:00:00, dtype: float64"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.loc[dates[0]]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "按标签在多轴上选择："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2013-01-01</th>\n",
       "      <td>-0.694882</td>\n",
       "      <td>-0.019432</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-02</th>\n",
       "      <td>0.678495</td>\n",
       "      <td>0.971696</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-03</th>\n",
       "      <td>-0.419630</td>\n",
       "      <td>0.090373</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-04</th>\n",
       "      <td>-0.374271</td>\n",
       "      <td>0.122785</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-05</th>\n",
       "      <td>-0.795299</td>\n",
       "      <td>0.987344</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-06</th>\n",
       "      <td>-0.419522</td>\n",
       "      <td>0.692337</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   A         B\n",
       "2013-01-01 -0.694882 -0.019432\n",
       "2013-01-02  0.678495  0.971696\n",
       "2013-01-03 -0.419630  0.090373\n",
       "2013-01-04 -0.374271  0.122785\n",
       "2013-01-05 -0.795299  0.987344\n",
       "2013-01-06 -0.419522  0.692337"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.loc[:, [\"A\", \"B\"]]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "显示标签切片时，两个端点都包括在内:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2013-01-02</th>\n",
       "      <td>0.678495</td>\n",
       "      <td>0.971696</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-03</th>\n",
       "      <td>-0.419630</td>\n",
       "      <td>0.090373</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-04</th>\n",
       "      <td>-0.374271</td>\n",
       "      <td>0.122785</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   A         B\n",
       "2013-01-02  0.678495  0.971696\n",
       "2013-01-03 -0.419630  0.090373\n",
       "2013-01-04 -0.374271  0.122785"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.loc[\"20130102\":\"20130104\", [\"A\", \"B\"]]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "A    0.678495\n",
       "B    0.971696\n",
       "Name: 2013-01-02 00:00:00, dtype: float64"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.loc[\"20130102\", [\"A\", \"B\"]]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "获得扩展值："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "-0.6948819333195682"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.loc[dates[0], \"A\"]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "-0.6948819333195682"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.at[dates[0], \"A\"]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 按位置选择\n",
    "\n",
    "通过通过的整数位置进行选择："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "A   -0.374271\n",
       "B    0.122785\n",
       "C   -0.591558\n",
       "D   -1.617607\n",
       "Name: 2013-01-04 00:00:00, dtype: float64"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.iloc[3]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "通过整数切片，作用类似于NumPy/Python："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2013-01-04</th>\n",
       "      <td>-0.374271</td>\n",
       "      <td>0.122785</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-05</th>\n",
       "      <td>-0.795299</td>\n",
       "      <td>0.987344</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   A         B\n",
       "2013-01-04 -0.374271  0.122785\n",
       "2013-01-05 -0.795299  0.987344"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.iloc[3:5, 0:2]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "按整数位置位置列表，类似于 NumPy/Python 样式："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>C</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2013-01-02</th>\n",
       "      <td>0.678495</td>\n",
       "      <td>1.112416</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-03</th>\n",
       "      <td>-0.419630</td>\n",
       "      <td>-1.025176</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-05</th>\n",
       "      <td>-0.795299</td>\n",
       "      <td>0.355418</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   A         C\n",
       "2013-01-02  0.678495  1.112416\n",
       "2013-01-03 -0.419630 -1.025176\n",
       "2013-01-05 -0.795299  0.355418"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.iloc[[1, 2, 4], [0, 2]]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "对于明确切片行："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2013-01-02</th>\n",
       "      <td>0.678495</td>\n",
       "      <td>0.971696</td>\n",
       "      <td>1.112416</td>\n",
       "      <td>-0.569820</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-03</th>\n",
       "      <td>-0.419630</td>\n",
       "      <td>0.090373</td>\n",
       "      <td>-1.025176</td>\n",
       "      <td>-0.841699</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   A         B         C         D\n",
       "2013-01-02  0.678495  0.971696  1.112416 -0.569820\n",
       "2013-01-03 -0.419630  0.090373 -1.025176 -0.841699"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.iloc[1:3, :]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "对于切片列，明确："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2013-01-01</th>\n",
       "      <td>-0.019432</td>\n",
       "      <td>0.585831</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-02</th>\n",
       "      <td>0.971696</td>\n",
       "      <td>1.112416</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-03</th>\n",
       "      <td>0.090373</td>\n",
       "      <td>-1.025176</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-04</th>\n",
       "      <td>0.122785</td>\n",
       "      <td>-0.591558</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-05</th>\n",
       "      <td>0.987344</td>\n",
       "      <td>0.355418</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-06</th>\n",
       "      <td>0.692337</td>\n",
       "      <td>-0.111968</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   B         C\n",
       "2013-01-01 -0.019432  0.585831\n",
       "2013-01-02  0.971696  1.112416\n",
       "2013-01-03  0.090373 -1.025176\n",
       "2013-01-04  0.122785 -0.591558\n",
       "2013-01-05  0.987344  0.355418\n",
       "2013-01-06  0.692337 -0.111968"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.iloc[:, 1:3]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "明确获取价值："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.9716955098745442"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.iloc[1, 1]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "对于快速访问缩放（相当于先前的方法）："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.9716955098745442"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.iat[1, 1]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 布尔索引\n",
    "\n",
    "使用单列的值来选择数据。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2013-01-02</th>\n",
       "      <td>0.678495</td>\n",
       "      <td>0.971696</td>\n",
       "      <td>1.112416</td>\n",
       "      <td>-0.56982</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   A         B         C        D\n",
       "2013-01-02  0.678495  0.971696  1.112416 -0.56982"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df[df[\"A\"] > 0]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "从满足条件的数据帧中选择值。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2013-01-01</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.585831</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-02</th>\n",
       "      <td>0.678495</td>\n",
       "      <td>0.971696</td>\n",
       "      <td>1.112416</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-03</th>\n",
       "      <td>NaN</td>\n",
       "      <td>0.090373</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-04</th>\n",
       "      <td>NaN</td>\n",
       "      <td>0.122785</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-05</th>\n",
       "      <td>NaN</td>\n",
       "      <td>0.987344</td>\n",
       "      <td>0.355418</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-06</th>\n",
       "      <td>NaN</td>\n",
       "      <td>0.692337</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   A         B         C   D\n",
       "2013-01-01       NaN       NaN  0.585831 NaN\n",
       "2013-01-02  0.678495  0.971696  1.112416 NaN\n",
       "2013-01-03       NaN  0.090373       NaN NaN\n",
       "2013-01-04       NaN  0.122785       NaN NaN\n",
       "2013-01-05       NaN  0.987344  0.355418 NaN\n",
       "2013-01-06       NaN  0.692337       NaN NaN"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df[df > 0]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "使用isin()过滤方法："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "      <th>E</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2013-01-01</th>\n",
       "      <td>-0.694882</td>\n",
       "      <td>-0.019432</td>\n",
       "      <td>0.585831</td>\n",
       "      <td>-0.381029</td>\n",
       "      <td>one</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-02</th>\n",
       "      <td>0.678495</td>\n",
       "      <td>0.971696</td>\n",
       "      <td>1.112416</td>\n",
       "      <td>-0.569820</td>\n",
       "      <td>one</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-03</th>\n",
       "      <td>-0.419630</td>\n",
       "      <td>0.090373</td>\n",
       "      <td>-1.025176</td>\n",
       "      <td>-0.841699</td>\n",
       "      <td>two</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-04</th>\n",
       "      <td>-0.374271</td>\n",
       "      <td>0.122785</td>\n",
       "      <td>-0.591558</td>\n",
       "      <td>-1.617607</td>\n",
       "      <td>three</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-05</th>\n",
       "      <td>-0.795299</td>\n",
       "      <td>0.987344</td>\n",
       "      <td>0.355418</td>\n",
       "      <td>-0.430621</td>\n",
       "      <td>four</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-06</th>\n",
       "      <td>-0.419522</td>\n",
       "      <td>0.692337</td>\n",
       "      <td>-0.111968</td>\n",
       "      <td>-0.302903</td>\n",
       "      <td>three</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   A         B         C         D      E\n",
       "2013-01-01 -0.694882 -0.019432  0.585831 -0.381029    one\n",
       "2013-01-02  0.678495  0.971696  1.112416 -0.569820    one\n",
       "2013-01-03 -0.419630  0.090373 -1.025176 -0.841699    two\n",
       "2013-01-04 -0.374271  0.122785 -0.591558 -1.617607  three\n",
       "2013-01-05 -0.795299  0.987344  0.355418 -0.430621   four\n",
       "2013-01-06 -0.419522  0.692337 -0.111968 -0.302903  three"
      ]
     },
     "execution_count": 35,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df2 = df.copy()\n",
    "df2[\"E\"] = [\"one\", \"one\", \"two\", \"three\", \"four\", \"three\"]\n",
    "\n",
    "df2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "      <th>E</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2013-01-03</th>\n",
       "      <td>-0.419630</td>\n",
       "      <td>0.090373</td>\n",
       "      <td>-1.025176</td>\n",
       "      <td>-0.841699</td>\n",
       "      <td>two</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-05</th>\n",
       "      <td>-0.795299</td>\n",
       "      <td>0.987344</td>\n",
       "      <td>0.355418</td>\n",
       "      <td>-0.430621</td>\n",
       "      <td>four</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   A         B         C         D     E\n",
       "2013-01-03 -0.419630  0.090373 -1.025176 -0.841699   two\n",
       "2013-01-05 -0.795299  0.987344  0.355418 -0.430621  four"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df2[df2[\"E\"].isin([\"two\", \"four\"])]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 设置\n",
    "\n",
    "设置新列会自动按索引对齐数据。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2013-01-02    1\n",
       "2013-01-03    2\n",
       "2013-01-04    3\n",
       "2013-01-05    4\n",
       "2013-01-06    5\n",
       "2013-01-07    6\n",
       "Freq: D, dtype: int64"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "s1 = pd.Series([1, 2, 3, 4, 5, 6], index=pd.date_range(\"20130102\", periods=6))\n",
    "s1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [],
   "source": [
    "df[\"F\"] = s1"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "按标签设置值："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [],
   "source": [
    "df.at[dates[0], \"A\"] = 0"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "通过分配 NumPy 阵列进行设置："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [],
   "source": [
    "df.loc[:, \"D\"] = np.array([5] * len(df))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "先前设置操作的结果。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "      <th>F</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2013-01-01</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>-0.019432</td>\n",
       "      <td>0.585831</td>\n",
       "      <td>5</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-02</th>\n",
       "      <td>0.678495</td>\n",
       "      <td>0.971696</td>\n",
       "      <td>1.112416</td>\n",
       "      <td>5</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-03</th>\n",
       "      <td>-0.419630</td>\n",
       "      <td>0.090373</td>\n",
       "      <td>-1.025176</td>\n",
       "      <td>5</td>\n",
       "      <td>2.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-04</th>\n",
       "      <td>-0.374271</td>\n",
       "      <td>0.122785</td>\n",
       "      <td>-0.591558</td>\n",
       "      <td>5</td>\n",
       "      <td>3.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-05</th>\n",
       "      <td>-0.795299</td>\n",
       "      <td>0.987344</td>\n",
       "      <td>0.355418</td>\n",
       "      <td>5</td>\n",
       "      <td>4.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-06</th>\n",
       "      <td>-0.419522</td>\n",
       "      <td>0.692337</td>\n",
       "      <td>-0.111968</td>\n",
       "      <td>5</td>\n",
       "      <td>5.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   A         B         C  D    F\n",
       "2013-01-01  0.000000 -0.019432  0.585831  5  NaN\n",
       "2013-01-02  0.678495  0.971696  1.112416  5  1.0\n",
       "2013-01-03 -0.419630  0.090373 -1.025176  5  2.0\n",
       "2013-01-04 -0.374271  0.122785 -0.591558  5  3.0\n",
       "2013-01-05 -0.795299  0.987344  0.355418  5  4.0\n",
       "2013-01-06 -0.419522  0.692337 -0.111968  5  5.0"
      ]
     },
     "execution_count": 41,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "操作where设置。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "      <th>F</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2013-01-01</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>-0.019432</td>\n",
       "      <td>-0.585831</td>\n",
       "      <td>-5</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-02</th>\n",
       "      <td>-0.678495</td>\n",
       "      <td>-0.971696</td>\n",
       "      <td>-1.112416</td>\n",
       "      <td>-5</td>\n",
       "      <td>-1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-03</th>\n",
       "      <td>-0.419630</td>\n",
       "      <td>-0.090373</td>\n",
       "      <td>-1.025176</td>\n",
       "      <td>-5</td>\n",
       "      <td>-2.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-04</th>\n",
       "      <td>-0.374271</td>\n",
       "      <td>-0.122785</td>\n",
       "      <td>-0.591558</td>\n",
       "      <td>-5</td>\n",
       "      <td>-3.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-05</th>\n",
       "      <td>-0.795299</td>\n",
       "      <td>-0.987344</td>\n",
       "      <td>-0.355418</td>\n",
       "      <td>-5</td>\n",
       "      <td>-4.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-06</th>\n",
       "      <td>-0.419522</td>\n",
       "      <td>-0.692337</td>\n",
       "      <td>-0.111968</td>\n",
       "      <td>-5</td>\n",
       "      <td>-5.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   A         B         C  D    F\n",
       "2013-01-01  0.000000 -0.019432 -0.585831 -5  NaN\n",
       "2013-01-02 -0.678495 -0.971696 -1.112416 -5 -1.0\n",
       "2013-01-03 -0.419630 -0.090373 -1.025176 -5 -2.0\n",
       "2013-01-04 -0.374271 -0.122785 -0.591558 -5 -3.0\n",
       "2013-01-05 -0.795299 -0.987344 -0.355418 -5 -4.0\n",
       "2013-01-06 -0.419522 -0.692337 -0.111968 -5 -5.0"
      ]
     },
     "execution_count": 42,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df2 = df.copy()\n",
    "df2[df2 > 0] = -df2\n",
    "df2"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 缺少数据\n",
    "\n",
    "pandas主要使用 np.nan 来表示缺失的数据。默认情况下，它不包括在计算中。请参阅\"缺失数据\"部分.\n",
    "\n",
    "驯鹿行允许您更改/添加/删除指定轴上的索引。这返回数据的副本。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "      <th>F</th>\n",
       "      <th>E</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2013-01-01</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>-0.019432</td>\n",
       "      <td>0.585831</td>\n",
       "      <td>5</td>\n",
       "      <td>NaN</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-02</th>\n",
       "      <td>0.678495</td>\n",
       "      <td>0.971696</td>\n",
       "      <td>1.112416</td>\n",
       "      <td>5</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-03</th>\n",
       "      <td>-0.419630</td>\n",
       "      <td>0.090373</td>\n",
       "      <td>-1.025176</td>\n",
       "      <td>5</td>\n",
       "      <td>2.0</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-04</th>\n",
       "      <td>-0.374271</td>\n",
       "      <td>0.122785</td>\n",
       "      <td>-0.591558</td>\n",
       "      <td>5</td>\n",
       "      <td>3.0</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   A         B         C  D    F    E\n",
       "2013-01-01  0.000000 -0.019432  0.585831  5  NaN  1.0\n",
       "2013-01-02  0.678495  0.971696  1.112416  5  1.0  1.0\n",
       "2013-01-03 -0.419630  0.090373 -1.025176  5  2.0  NaN\n",
       "2013-01-04 -0.374271  0.122785 -0.591558  5  3.0  NaN"
      ]
     },
     "execution_count": 43,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df1 = df.reindex(index=dates[0:4], columns=list(df.columns) + [\"E\"])\n",
    "\n",
    "df1.loc[dates[0] : dates[1], \"E\"] = 1\n",
    "\n",
    "df1"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "丢弃任何缺少数据的行。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "      <th>F</th>\n",
       "      <th>E</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2013-01-02</th>\n",
       "      <td>0.678495</td>\n",
       "      <td>0.971696</td>\n",
       "      <td>1.112416</td>\n",
       "      <td>5</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   A         B         C  D    F    E\n",
       "2013-01-02  0.678495  0.971696  1.112416  5  1.0  1.0"
      ]
     },
     "execution_count": 44,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df1.dropna(how=\"any\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "填写缺失的数据。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "      <th>F</th>\n",
       "      <th>E</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2013-01-01</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>-0.019432</td>\n",
       "      <td>0.585831</td>\n",
       "      <td>5</td>\n",
       "      <td>5.0</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-02</th>\n",
       "      <td>0.678495</td>\n",
       "      <td>0.971696</td>\n",
       "      <td>1.112416</td>\n",
       "      <td>5</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-03</th>\n",
       "      <td>-0.419630</td>\n",
       "      <td>0.090373</td>\n",
       "      <td>-1.025176</td>\n",
       "      <td>5</td>\n",
       "      <td>2.0</td>\n",
       "      <td>5.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-04</th>\n",
       "      <td>-0.374271</td>\n",
       "      <td>0.122785</td>\n",
       "      <td>-0.591558</td>\n",
       "      <td>5</td>\n",
       "      <td>3.0</td>\n",
       "      <td>5.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   A         B         C  D    F    E\n",
       "2013-01-01  0.000000 -0.019432  0.585831  5  5.0  1.0\n",
       "2013-01-02  0.678495  0.971696  1.112416  5  1.0  1.0\n",
       "2013-01-03 -0.419630  0.090373 -1.025176  5  2.0  5.0\n",
       "2013-01-04 -0.374271  0.122785 -0.591558  5  3.0  5.0"
      ]
     },
     "execution_count": 45,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df1.fillna(value=5)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "得到布尔面具， 其中值是nan."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "      <th>F</th>\n",
       "      <th>E</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2013-01-01</th>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-02</th>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-03</th>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-04</th>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                A      B      C      D      F      E\n",
       "2013-01-01  False  False  False  False   True  False\n",
       "2013-01-02  False  False  False  False  False  False\n",
       "2013-01-03  False  False  False  False  False   True\n",
       "2013-01-04  False  False  False  False  False   True"
      ]
     },
     "execution_count": 46,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.isna(df1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 统计\n",
    "\n",
    "操作一般排除缺失的数据。\n",
    "\n",
    "执行描述性统计："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "A   -0.221704\n",
       "B    0.474184\n",
       "C    0.054161\n",
       "D    5.000000\n",
       "F    3.000000\n",
       "dtype: float64"
      ]
     },
     "execution_count": 47,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.mean()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "另一轴上的相同操作："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2013-01-01    1.391600\n",
       "2013-01-02    1.752521\n",
       "2013-01-03    1.129113\n",
       "2013-01-04    1.431391\n",
       "2013-01-05    1.909493\n",
       "2013-01-06    2.032169\n",
       "Freq: D, dtype: float64"
      ]
     },
     "execution_count": 48,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.mean(1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "与具有不同尺寸且需要对齐的对象一起操作。此外，大熊猫会按照指定的尺寸自动广播。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2013-01-01    NaN\n",
       "2013-01-02    NaN\n",
       "2013-01-03    1.0\n",
       "2013-01-04    3.0\n",
       "2013-01-05    5.0\n",
       "2013-01-06    NaN\n",
       "Freq: D, dtype: float64"
      ]
     },
     "execution_count": 49,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "s = pd.Series([1, 3, 5, np.nan, 6, 8], index=dates).shift(2)\n",
    "\n",
    "s"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "      <th>F</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2013-01-01</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-02</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-03</th>\n",
       "      <td>-1.419630</td>\n",
       "      <td>-0.909627</td>\n",
       "      <td>-2.025176</td>\n",
       "      <td>4.0</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-04</th>\n",
       "      <td>-3.374271</td>\n",
       "      <td>-2.877215</td>\n",
       "      <td>-3.591558</td>\n",
       "      <td>2.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-05</th>\n",
       "      <td>-5.795299</td>\n",
       "      <td>-4.012656</td>\n",
       "      <td>-4.644582</td>\n",
       "      <td>0.0</td>\n",
       "      <td>-1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-06</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   A         B         C    D    F\n",
       "2013-01-01       NaN       NaN       NaN  NaN  NaN\n",
       "2013-01-02       NaN       NaN       NaN  NaN  NaN\n",
       "2013-01-03 -1.419630 -0.909627 -2.025176  4.0  1.0\n",
       "2013-01-04 -3.374271 -2.877215 -3.591558  2.0  0.0\n",
       "2013-01-05 -5.795299 -4.012656 -4.644582  0.0 -1.0\n",
       "2013-01-06       NaN       NaN       NaN  NaN  NaN"
      ]
     },
     "execution_count": 50,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.sub(s, axis=\"index\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 应用\n",
    "\n",
    "将功能应用于数据："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "      <th>F</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2013-01-01</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>-0.019432</td>\n",
       "      <td>0.585831</td>\n",
       "      <td>5</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-02</th>\n",
       "      <td>0.678495</td>\n",
       "      <td>0.952263</td>\n",
       "      <td>1.698247</td>\n",
       "      <td>10</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-03</th>\n",
       "      <td>0.258866</td>\n",
       "      <td>1.042636</td>\n",
       "      <td>0.673071</td>\n",
       "      <td>15</td>\n",
       "      <td>3.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-04</th>\n",
       "      <td>-0.115405</td>\n",
       "      <td>1.165421</td>\n",
       "      <td>0.081514</td>\n",
       "      <td>20</td>\n",
       "      <td>6.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-05</th>\n",
       "      <td>-0.910705</td>\n",
       "      <td>2.152765</td>\n",
       "      <td>0.436932</td>\n",
       "      <td>25</td>\n",
       "      <td>10.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-06</th>\n",
       "      <td>-1.330226</td>\n",
       "      <td>2.845101</td>\n",
       "      <td>0.324964</td>\n",
       "      <td>30</td>\n",
       "      <td>15.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   A         B         C   D     F\n",
       "2013-01-01  0.000000 -0.019432  0.585831   5   NaN\n",
       "2013-01-02  0.678495  0.952263  1.698247  10   1.0\n",
       "2013-01-03  0.258866  1.042636  0.673071  15   3.0\n",
       "2013-01-04 -0.115405  1.165421  0.081514  20   6.0\n",
       "2013-01-05 -0.910705  2.152765  0.436932  25  10.0\n",
       "2013-01-06 -1.330226  2.845101  0.324964  30  15.0"
      ]
     },
     "execution_count": 51,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.apply(np.cumsum)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "A    1.473794\n",
       "B    1.006776\n",
       "C    2.137591\n",
       "D    0.000000\n",
       "F    4.000000\n",
       "dtype: float64"
      ]
     },
     "execution_count": 52,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.apply(lambda x: x.max() - x.min())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 直方图\n",
    "\n",
    "查看更多直方图和脱色."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0    4\n",
       "1    2\n",
       "2    2\n",
       "3    4\n",
       "4    3\n",
       "5    0\n",
       "6    5\n",
       "7    0\n",
       "8    4\n",
       "9    5\n",
       "dtype: int32"
      ]
     },
     "execution_count": 53,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "s = pd.Series(np.random.randint(0, 7, size=10))\n",
    "\n",
    "s"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "4    3\n",
       "2    2\n",
       "0    2\n",
       "5    2\n",
       "3    1\n",
       "dtype: int64"
      ]
     },
     "execution_count": 54,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "s.value_counts()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 字符串方法\n",
    "\n",
    "系列在str属性中配备了一组字符串处理方法，便于在阵列的每个元素上操作，如下图片段中所示。请注意，在str中的模式匹配通常默认使用常规表达式（在某些情况下始终使用它们）。查看更多矢量字符串方法."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0       a\n",
       "1       b\n",
       "2       c\n",
       "3    aaba\n",
       "4    baca\n",
       "5     NaN\n",
       "6    caba\n",
       "7     dog\n",
       "8     cat\n",
       "dtype: object"
      ]
     },
     "execution_count": 55,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "s = pd.Series([\"A\", \"B\", \"C\", \"Aaba\", \"Baca\", np.nan, \"CABA\", \"dog\", \"cat\"])\n",
    "\n",
    "s.str.lower()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 合并\n",
    "### 康卡特\n",
    "\n",
    "在连接/合并型操作的情况下，熊猫为各种索引和关系代数功能提供了各种设施，便于将系列和数据帧对象与各种设置逻辑相结合。\n",
    "\n",
    "请参阅合并部分.\n",
    "\n",
    "将大熊猫物体与concat() :"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>0</th>\n",
       "      <th>1</th>\n",
       "      <th>2</th>\n",
       "      <th>3</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.353591</td>\n",
       "      <td>-0.846529</td>\n",
       "      <td>-0.282417</td>\n",
       "      <td>-0.130753</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.970226</td>\n",
       "      <td>-0.500620</td>\n",
       "      <td>0.345430</td>\n",
       "      <td>0.395994</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1.014176</td>\n",
       "      <td>1.176170</td>\n",
       "      <td>0.247709</td>\n",
       "      <td>0.379087</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>-1.166246</td>\n",
       "      <td>0.762992</td>\n",
       "      <td>-0.859910</td>\n",
       "      <td>0.164724</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>-1.414599</td>\n",
       "      <td>0.607288</td>\n",
       "      <td>1.946452</td>\n",
       "      <td>0.140375</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>1.126565</td>\n",
       "      <td>-0.057432</td>\n",
       "      <td>-0.134079</td>\n",
       "      <td>-1.424725</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>0.816572</td>\n",
       "      <td>0.398571</td>\n",
       "      <td>0.292453</td>\n",
       "      <td>1.682333</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>-1.177657</td>\n",
       "      <td>2.385182</td>\n",
       "      <td>-1.174228</td>\n",
       "      <td>-0.996019</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>-0.881235</td>\n",
       "      <td>-1.083279</td>\n",
       "      <td>-0.943865</td>\n",
       "      <td>-0.089970</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>0.285113</td>\n",
       "      <td>1.729293</td>\n",
       "      <td>1.305498</td>\n",
       "      <td>-0.025043</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          0         1         2         3\n",
       "0  0.353591 -0.846529 -0.282417 -0.130753\n",
       "1  0.970226 -0.500620  0.345430  0.395994\n",
       "2  1.014176  1.176170  0.247709  0.379087\n",
       "3 -1.166246  0.762992 -0.859910  0.164724\n",
       "4 -1.414599  0.607288  1.946452  0.140375\n",
       "5  1.126565 -0.057432 -0.134079 -1.424725\n",
       "6  0.816572  0.398571  0.292453  1.682333\n",
       "7 -1.177657  2.385182 -1.174228 -0.996019\n",
       "8 -0.881235 -1.083279 -0.943865 -0.089970\n",
       "9  0.285113  1.729293  1.305498 -0.025043"
      ]
     },
     "execution_count": 56,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.DataFrame(np.random.randn(10, 4))\n",
    "\n",
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>0</th>\n",
       "      <th>1</th>\n",
       "      <th>2</th>\n",
       "      <th>3</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.353591</td>\n",
       "      <td>-0.846529</td>\n",
       "      <td>-0.282417</td>\n",
       "      <td>-0.130753</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.970226</td>\n",
       "      <td>-0.500620</td>\n",
       "      <td>0.345430</td>\n",
       "      <td>0.395994</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1.014176</td>\n",
       "      <td>1.176170</td>\n",
       "      <td>0.247709</td>\n",
       "      <td>0.379087</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>-1.166246</td>\n",
       "      <td>0.762992</td>\n",
       "      <td>-0.859910</td>\n",
       "      <td>0.164724</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>-1.414599</td>\n",
       "      <td>0.607288</td>\n",
       "      <td>1.946452</td>\n",
       "      <td>0.140375</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>1.126565</td>\n",
       "      <td>-0.057432</td>\n",
       "      <td>-0.134079</td>\n",
       "      <td>-1.424725</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>0.816572</td>\n",
       "      <td>0.398571</td>\n",
       "      <td>0.292453</td>\n",
       "      <td>1.682333</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>-1.177657</td>\n",
       "      <td>2.385182</td>\n",
       "      <td>-1.174228</td>\n",
       "      <td>-0.996019</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>-0.881235</td>\n",
       "      <td>-1.083279</td>\n",
       "      <td>-0.943865</td>\n",
       "      <td>-0.089970</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>0.285113</td>\n",
       "      <td>1.729293</td>\n",
       "      <td>1.305498</td>\n",
       "      <td>-0.025043</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          0         1         2         3\n",
       "0  0.353591 -0.846529 -0.282417 -0.130753\n",
       "1  0.970226 -0.500620  0.345430  0.395994\n",
       "2  1.014176  1.176170  0.247709  0.379087\n",
       "3 -1.166246  0.762992 -0.859910  0.164724\n",
       "4 -1.414599  0.607288  1.946452  0.140375\n",
       "5  1.126565 -0.057432 -0.134079 -1.424725\n",
       "6  0.816572  0.398571  0.292453  1.682333\n",
       "7 -1.177657  2.385182 -1.174228 -0.996019\n",
       "8 -0.881235 -1.083279 -0.943865 -0.089970\n",
       "9  0.285113  1.729293  1.305498 -0.025043"
      ]
     },
     "execution_count": 57,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pieces = [df[:3], df[3:7], df[7:]]\n",
    "\n",
    "pd.concat(pieces)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 加入\n",
    "\n",
    "SQL 风格合并。请参阅数据库样式连接部分。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>key</th>\n",
       "      <th>lval</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>foo</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>foo</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   key  lval\n",
       "0  foo     1\n",
       "1  foo     2"
      ]
     },
     "execution_count": 58,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "left = pd.DataFrame({\"key\": [\"foo\", \"foo\"], \"lval\": [1, 2]})\n",
    "\n",
    "right = pd.DataFrame({\"key\": [\"foo\", \"foo\"], \"rval\": [4, 5]})\n",
    "\n",
    "left"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>key</th>\n",
       "      <th>rval</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>foo</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>foo</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   key  rval\n",
       "0  foo     4\n",
       "1  foo     5"
      ]
     },
     "execution_count": 59,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "right"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>key</th>\n",
       "      <th>lval</th>\n",
       "      <th>rval</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>foo</td>\n",
       "      <td>1</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>foo</td>\n",
       "      <td>1</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>foo</td>\n",
       "      <td>2</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>foo</td>\n",
       "      <td>2</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   key  lval  rval\n",
       "0  foo     1     4\n",
       "1  foo     1     5\n",
       "2  foo     2     4\n",
       "3  foo     2     5"
      ]
     },
     "execution_count": 60,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.merge(left, right, on=\"key\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 分组\n",
    "\n",
    "通过\"逐组\"，我们指的是涉及以下一个或多个步骤的过程：\n",
    "\n",
    "      *  根据某些标准将数据拆分为组\n",
    "\n",
    "      *  独立地将功能应用于每个组\n",
    "\n",
    "      *  将结果组合到数据结构中\n",
    "\n",
    "请参阅分组部分."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>foo</td>\n",
       "      <td>one</td>\n",
       "      <td>-0.653290</td>\n",
       "      <td>0.099314</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>bar</td>\n",
       "      <td>one</td>\n",
       "      <td>0.011997</td>\n",
       "      <td>0.590227</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>foo</td>\n",
       "      <td>two</td>\n",
       "      <td>0.700523</td>\n",
       "      <td>-0.387955</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>bar</td>\n",
       "      <td>three</td>\n",
       "      <td>0.023750</td>\n",
       "      <td>0.719952</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>foo</td>\n",
       "      <td>two</td>\n",
       "      <td>0.089690</td>\n",
       "      <td>0.245830</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>bar</td>\n",
       "      <td>two</td>\n",
       "      <td>0.547005</td>\n",
       "      <td>0.322184</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>foo</td>\n",
       "      <td>one</td>\n",
       "      <td>0.252010</td>\n",
       "      <td>0.844336</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>foo</td>\n",
       "      <td>three</td>\n",
       "      <td>-0.419885</td>\n",
       "      <td>0.018981</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     A      B         C         D\n",
       "0  foo    one -0.653290  0.099314\n",
       "1  bar    one  0.011997  0.590227\n",
       "2  foo    two  0.700523 -0.387955\n",
       "3  bar  three  0.023750  0.719952\n",
       "4  foo    two  0.089690  0.245830\n",
       "5  bar    two  0.547005  0.322184\n",
       "6  foo    one  0.252010  0.844336\n",
       "7  foo  three -0.419885  0.018981"
      ]
     },
     "execution_count": 61,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.DataFrame(\n",
    "\n",
    "    {\n",
    "\n",
    "        \"A\": [\"foo\", \"bar\", \"foo\", \"bar\", \"foo\", \"bar\", \"foo\", \"foo\"],\n",
    "\n",
    "        \"B\": [\"one\", \"one\", \"two\", \"three\", \"two\", \"two\", \"one\", \"three\"],\n",
    "\n",
    "        \"C\": np.random.randn(8),\n",
    "\n",
    "        \"D\": np.random.randn(8),\n",
    "\n",
    "    }\n",
    "\n",
    ")\n",
    "df"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "分组，然后将sum()功能应用于生成的组。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>bar</th>\n",
       "      <td>0.582752</td>\n",
       "      <td>1.632364</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>foo</th>\n",
       "      <td>-0.030953</td>\n",
       "      <td>0.820506</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "            C         D\n",
       "A                      \n",
       "bar  0.582752  1.632364\n",
       "foo -0.030953  0.820506"
      ]
     },
     "execution_count": 62,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.groupby(\"A\").sum()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>bar</th>\n",
       "      <td>0.582752</td>\n",
       "      <td>1.632364</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>foo</th>\n",
       "      <td>-0.030953</td>\n",
       "      <td>0.820506</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "            C         D\n",
       "A                      \n",
       "bar  0.582752  1.632364\n",
       "foo -0.030953  0.820506"
      ]
     },
     "execution_count": 63,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.groupby(\"A\").sum()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>first</th>\n",
       "      <th>second</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">bar</th>\n",
       "      <th>one</th>\n",
       "      <td>0.599670</td>\n",
       "      <td>0.253220</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>two</th>\n",
       "      <td>0.295208</td>\n",
       "      <td>-0.224526</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">baz</th>\n",
       "      <th>one</th>\n",
       "      <td>-1.474671</td>\n",
       "      <td>0.505637</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>two</th>\n",
       "      <td>-0.038403</td>\n",
       "      <td>0.440442</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                     A         B\n",
       "first second                    \n",
       "bar   one     0.599670  0.253220\n",
       "      two     0.295208 -0.224526\n",
       "baz   one    -1.474671  0.505637\n",
       "      two    -0.038403  0.440442"
      ]
     },
     "execution_count": 64,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "tuples = list(\n",
    "\n",
    "    zip(\n",
    "\n",
    "        *[\n",
    "\n",
    "            [\"bar\", \"bar\", \"baz\", \"baz\", \"foo\", \"foo\", \"qux\", \"qux\"],\n",
    "\n",
    "            [\"one\", \"two\", \"one\", \"two\", \"one\", \"two\", \"one\", \"two\"],\n",
    "\n",
    "        ]\n",
    "\n",
    "    )\n",
    "\n",
    ")\n",
    "\n",
    "\n",
    "\n",
    "index = pd.MultiIndex.from_tuples(tuples, names=[\"first\", \"second\"])\n",
    "\n",
    "df = pd.DataFrame(np.random.randn(8, 2), index=index, columns=[\"A\", \"B\"])\n",
    "\n",
    "df2 = df[:4]\n",
    "\n",
    "df2"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "stack()方法\"压缩\"数据帧列中的一个关卡。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "first  second   \n",
       "bar    one     A    0.599670\n",
       "               B    0.253220\n",
       "       two     A    0.295208\n",
       "               B   -0.224526\n",
       "baz    one     A   -1.474671\n",
       "               B    0.505637\n",
       "       two     A   -0.038403\n",
       "               B    0.440442\n",
       "dtype: float64"
      ]
     },
     "execution_count": 65,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "stacked = df2.stack()\n",
    "\n",
    "stacked"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "与\"堆叠\"数据帧或系列（具有MultiIndexindex），stack()的反向操作是unstack()默认情况下，该堆栈无法堆叠最后一个级别:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>first</th>\n",
       "      <th>second</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">bar</th>\n",
       "      <th>one</th>\n",
       "      <td>0.599670</td>\n",
       "      <td>0.253220</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>two</th>\n",
       "      <td>0.295208</td>\n",
       "      <td>-0.224526</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">baz</th>\n",
       "      <th>one</th>\n",
       "      <td>-1.474671</td>\n",
       "      <td>0.505637</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>two</th>\n",
       "      <td>-0.038403</td>\n",
       "      <td>0.440442</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                     A         B\n",
       "first second                    \n",
       "bar   one     0.599670  0.253220\n",
       "      two     0.295208 -0.224526\n",
       "baz   one    -1.474671  0.505637\n",
       "      two    -0.038403  0.440442"
      ]
     },
     "execution_count": 66,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "stacked.unstack()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>second</th>\n",
       "      <th>one</th>\n",
       "      <th>two</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>first</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">bar</th>\n",
       "      <th>A</th>\n",
       "      <td>0.599670</td>\n",
       "      <td>0.295208</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>0.253220</td>\n",
       "      <td>-0.224526</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">baz</th>\n",
       "      <th>A</th>\n",
       "      <td>-1.474671</td>\n",
       "      <td>-0.038403</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>0.505637</td>\n",
       "      <td>0.440442</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "second        one       two\n",
       "first                      \n",
       "bar   A  0.599670  0.295208\n",
       "      B  0.253220 -0.224526\n",
       "baz   A -1.474671 -0.038403\n",
       "      B  0.505637  0.440442"
      ]
     },
     "execution_count": 67,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "stacked.unstack(1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>first</th>\n",
       "      <th>bar</th>\n",
       "      <th>baz</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>second</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">one</th>\n",
       "      <th>A</th>\n",
       "      <td>0.599670</td>\n",
       "      <td>-1.474671</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>0.253220</td>\n",
       "      <td>0.505637</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">two</th>\n",
       "      <th>A</th>\n",
       "      <td>0.295208</td>\n",
       "      <td>-0.038403</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>-0.224526</td>\n",
       "      <td>0.440442</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "first          bar       baz\n",
       "second                      \n",
       "one    A  0.599670 -1.474671\n",
       "       B  0.253220  0.505637\n",
       "two    A  0.295208 -0.038403\n",
       "       B -0.224526  0.440442"
      ]
     },
     "execution_count": 68,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "stacked.unstack(0)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 枢轴表¶\n",
    "\n",
    "请参阅枢轴表上的部分."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "      <th>E</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>one</td>\n",
       "      <td>A</td>\n",
       "      <td>foo</td>\n",
       "      <td>-0.863863</td>\n",
       "      <td>-1.989308</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>one</td>\n",
       "      <td>B</td>\n",
       "      <td>foo</td>\n",
       "      <td>-1.029928</td>\n",
       "      <td>-0.631623</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>two</td>\n",
       "      <td>C</td>\n",
       "      <td>foo</td>\n",
       "      <td>0.081603</td>\n",
       "      <td>0.278476</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>three</td>\n",
       "      <td>A</td>\n",
       "      <td>bar</td>\n",
       "      <td>1.565266</td>\n",
       "      <td>-1.693786</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>one</td>\n",
       "      <td>B</td>\n",
       "      <td>bar</td>\n",
       "      <td>0.921142</td>\n",
       "      <td>0.473384</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>one</td>\n",
       "      <td>C</td>\n",
       "      <td>bar</td>\n",
       "      <td>0.512301</td>\n",
       "      <td>-0.811014</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>two</td>\n",
       "      <td>A</td>\n",
       "      <td>foo</td>\n",
       "      <td>-0.154880</td>\n",
       "      <td>0.770380</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>three</td>\n",
       "      <td>B</td>\n",
       "      <td>foo</td>\n",
       "      <td>0.229875</td>\n",
       "      <td>1.138788</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>one</td>\n",
       "      <td>C</td>\n",
       "      <td>foo</td>\n",
       "      <td>0.469934</td>\n",
       "      <td>-0.429647</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>one</td>\n",
       "      <td>A</td>\n",
       "      <td>bar</td>\n",
       "      <td>-1.565564</td>\n",
       "      <td>-2.849605</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>two</td>\n",
       "      <td>B</td>\n",
       "      <td>bar</td>\n",
       "      <td>0.233956</td>\n",
       "      <td>0.639962</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>three</td>\n",
       "      <td>C</td>\n",
       "      <td>bar</td>\n",
       "      <td>-0.196701</td>\n",
       "      <td>-0.710203</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        A  B    C         D         E\n",
       "0     one  A  foo -0.863863 -1.989308\n",
       "1     one  B  foo -1.029928 -0.631623\n",
       "2     two  C  foo  0.081603  0.278476\n",
       "3   three  A  bar  1.565266 -1.693786\n",
       "4     one  B  bar  0.921142  0.473384\n",
       "5     one  C  bar  0.512301 -0.811014\n",
       "6     two  A  foo -0.154880  0.770380\n",
       "7   three  B  foo  0.229875  1.138788\n",
       "8     one  C  foo  0.469934 -0.429647\n",
       "9     one  A  bar -1.565564 -2.849605\n",
       "10    two  B  bar  0.233956  0.639962\n",
       "11  three  C  bar -0.196701 -0.710203"
      ]
     },
     "execution_count": 69,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.DataFrame(\n",
    "\n",
    "    {\n",
    "\n",
    "        \"A\": [\"one\", \"one\", \"two\", \"three\"] * 3,\n",
    "\n",
    "        \"B\": [\"A\", \"B\", \"C\"] * 4,\n",
    "\n",
    "        \"C\": [\"foo\", \"foo\", \"foo\", \"bar\", \"bar\", \"bar\"] * 2,\n",
    "\n",
    "        \"D\": np.random.randn(12),\n",
    "\n",
    "        \"E\": np.random.randn(12),\n",
    "\n",
    "    }\n",
    "\n",
    ")\n",
    "\n",
    "df"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "我们可以非常轻松地从这些数据中生成枢轴表："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 70,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>C</th>\n",
       "      <th>bar</th>\n",
       "      <th>foo</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th rowspan=\"3\" valign=\"top\">one</th>\n",
       "      <th>A</th>\n",
       "      <td>-1.565564</td>\n",
       "      <td>-0.863863</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>0.921142</td>\n",
       "      <td>-1.029928</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>0.512301</td>\n",
       "      <td>0.469934</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"3\" valign=\"top\">three</th>\n",
       "      <th>A</th>\n",
       "      <td>1.565266</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>NaN</td>\n",
       "      <td>0.229875</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>-0.196701</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"3\" valign=\"top\">two</th>\n",
       "      <th>A</th>\n",
       "      <td>NaN</td>\n",
       "      <td>-0.154880</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>0.233956</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>NaN</td>\n",
       "      <td>0.081603</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "C             bar       foo\n",
       "A     B                    \n",
       "one   A -1.565564 -0.863863\n",
       "      B  0.921142 -1.029928\n",
       "      C  0.512301  0.469934\n",
       "three A  1.565266       NaN\n",
       "      B       NaN  0.229875\n",
       "      C -0.196701       NaN\n",
       "two   A       NaN -0.154880\n",
       "      B  0.233956       NaN\n",
       "      C       NaN  0.081603"
      ]
     },
     "execution_count": 70,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.pivot_table(df, values=\"D\", index=[\"A\", \"B\"], columns=[\"C\"])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 时间系列\n",
    "\n",
    "熊猫具有简单、强大和高效的功能，可在变频过程中执行重新采样操作（例如，将次要数据转换为 5 分钟数据）。这在财务申请中非常常见，但不限于财务申请。查看时间系列部分."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 71,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2012-01-01    28220\n",
       "Freq: 5T, dtype: int32"
      ]
     },
     "execution_count": 71,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "rng = pd.date_range(\"1/1/2012\", periods=100, freq=\"S\")\n",
    "\n",
    "ts = pd.Series(np.random.randint(0, 500, len(rng)), index=rng)\n",
    "\n",
    "ts.resample(\"5Min\").sum()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "时区表示："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2012-03-06   -1.225856\n",
       "2012-03-07    0.614685\n",
       "2012-03-08   -1.070512\n",
       "2012-03-09    0.822835\n",
       "2012-03-10    0.863865\n",
       "Freq: D, dtype: float64"
      ]
     },
     "execution_count": 72,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "rng = pd.date_range(\"3/6/2012 00:00\", periods=5, freq=\"D\")\n",
    "\n",
    "ts = pd.Series(np.random.randn(len(rng)), rng)\n",
    "\n",
    "ts"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2012-03-06 00:00:00+00:00   -1.225856\n",
       "2012-03-07 00:00:00+00:00    0.614685\n",
       "2012-03-08 00:00:00+00:00   -1.070512\n",
       "2012-03-09 00:00:00+00:00    0.822835\n",
       "2012-03-10 00:00:00+00:00    0.863865\n",
       "Freq: D, dtype: float64"
      ]
     },
     "execution_count": 73,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ts_utc = ts.tz_localize(\"UTC\")\n",
    "\n",
    "ts_utc"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "转换为另一个时区："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2012-03-05 19:00:00-05:00   -1.225856\n",
       "2012-03-06 19:00:00-05:00    0.614685\n",
       "2012-03-07 19:00:00-05:00   -1.070512\n",
       "2012-03-08 19:00:00-05:00    0.822835\n",
       "2012-03-09 19:00:00-05:00    0.863865\n",
       "Freq: D, dtype: float64"
      ]
     },
     "execution_count": 74,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ts_utc.tz_convert(\"US/Eastern\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "在时间跨度表示之间转换："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 75,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2012-01-31    0.219313\n",
       "2012-02-29    0.453971\n",
       "2012-03-31   -0.725823\n",
       "2012-04-30   -0.844536\n",
       "2012-05-31    0.639256\n",
       "Freq: M, dtype: float64"
      ]
     },
     "execution_count": 75,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "rng = pd.date_range(\"1/1/2012\", periods=5, freq=\"M\")\n",
    "\n",
    "ts = pd.Series(np.random.randn(len(rng)), index=rng)\n",
    "\n",
    "ts"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 76,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2012-01    0.219313\n",
       "2012-02    0.453971\n",
       "2012-03   -0.725823\n",
       "2012-04   -0.844536\n",
       "2012-05    0.639256\n",
       "Freq: M, dtype: float64"
      ]
     },
     "execution_count": 76,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ps = ts.to_period()\n",
    "\n",
    "ps"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 77,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2012-01-01    0.219313\n",
       "2012-02-01    0.453971\n",
       "2012-03-01   -0.725823\n",
       "2012-04-01   -0.844536\n",
       "2012-05-01    0.639256\n",
       "Freq: MS, dtype: float64"
      ]
     },
     "execution_count": 77,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ps.to_timestamp()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "在句点和时间戳之间转换，可以使用一些方便的算术功能。在下示例中，我们将季度频率转换为季度末的季度频率，从 11 月结束的年份转换为季度末的月末上午 9 点："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 78,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1990-03-01 09:00   -0.746630\n",
       "1990-06-01 09:00    0.880026\n",
       "1990-09-01 09:00   -0.981819\n",
       "1990-12-01 09:00   -1.319755\n",
       "1991-03-01 09:00   -0.334677\n",
       "Freq: H, dtype: float64"
      ]
     },
     "execution_count": 78,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "prng = pd.period_range(\"1990Q1\", \"2000Q4\", freq=\"Q-NOV\")\n",
    "\n",
    "ts = pd.Series(np.random.randn(len(prng)), prng)\n",
    "\n",
    "ts.index = (prng.asfreq(\"M\", \"e\") + 1).asfreq(\"H\", \"s\") + 9\n",
    "\n",
    "ts.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 分类\n",
    "\n",
    "熊猫可以在DataFrame中包括绝对数据。有关完整文档，请参阅分类介绍和API 文档."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 79,
   "metadata": {},
   "outputs": [],
   "source": [
    "df = pd.DataFrame(\n",
    "\n",
    "    {\"id\": [1, 2, 3, 4, 5, 6], \"raw_grade\": [\"a\", \"b\", \"b\", \"a\", \"a\", \"e\"]}\n",
    "\n",
    ")\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "将原始等级转换为分类数据类型。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 80,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0    a\n",
       "1    b\n",
       "2    b\n",
       "3    a\n",
       "4    a\n",
       "5    e\n",
       "Name: grade, dtype: category\n",
       "Categories (3, object): ['a', 'b', 'e']"
      ]
     },
     "execution_count": 80,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df[\"grade\"] = df[\"raw_grade\"].astype(\"category\")\n",
    "\n",
    "df[\"grade\"]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "将类别重命名为更有意义的名称（分配给Series.cat.categories()已到位！"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 81,
   "metadata": {},
   "outputs": [],
   "source": [
    "df[\"grade\"].cat.categories = [\"very good\", \"good\", \"very bad\"]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "重新排列类别并同时添加缺失的类别（默认情况下Series.cat()下的方法返回新Series）。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 82,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0    very good\n",
       "1         good\n",
       "2         good\n",
       "3    very good\n",
       "4    very good\n",
       "5     very bad\n",
       "Name: grade, dtype: category\n",
       "Categories (5, object): ['very bad', 'bad', 'medium', 'good', 'very good']"
      ]
     },
     "execution_count": 82,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df[\"grade\"] = df[\"grade\"].cat.set_categories(\n",
    "\n",
    "    [\"very bad\", \"bad\", \"medium\", \"good\", \"very good\"]\n",
    "\n",
    ")\n",
    "df[\"grade\"]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "排序是按类别排序的，而不是词汇顺序。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 83,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>id</th>\n",
       "      <th>raw_grade</th>\n",
       "      <th>grade</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>6</td>\n",
       "      <td>e</td>\n",
       "      <td>very bad</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>b</td>\n",
       "      <td>good</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>b</td>\n",
       "      <td>good</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>a</td>\n",
       "      <td>very good</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>a</td>\n",
       "      <td>very good</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>a</td>\n",
       "      <td>very good</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   id raw_grade      grade\n",
       "5   6         e   very bad\n",
       "1   2         b       good\n",
       "2   3         b       good\n",
       "0   1         a  very good\n",
       "3   4         a  very good\n",
       "4   5         a  very good"
      ]
     },
     "execution_count": 83,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.sort_values(by=\"grade\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "按分类列分组也显示空类别。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 84,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "grade\n",
       "very bad     1\n",
       "bad          0\n",
       "medium       0\n",
       "good         2\n",
       "very good    3\n",
       "dtype: int64"
      ]
     },
     "execution_count": 84,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.groupby(\"grade\").size()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 标图\n",
    "\n",
    "请参阅绘图文档。\n",
    "\n",
    "我们使用标准公约引用 matplotlib API："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "\n",
    "plt.close(\"all\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 86,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "ts = pd.Series(np.random.randn(1000), index=pd.date_range(\"1/1/2000\", periods=1000))\n",
    "\n",
    "ts = ts.cumsum()\n",
    "\n",
    "ts.plot();"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 88,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Figure size 432x288 with 0 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "df = pd.DataFrame(\n",
    "\n",
    "    np.random.randn(1000, 4), index=ts.index, columns=[\"A\", \"B\", \"C\", \"D\"]\n",
    "\n",
    ")\n",
    "\n",
    "\n",
    "\n",
    "df = df.cumsum()\n",
    "\n",
    "plt.figure();\n",
    "\n",
    "df.plot();\n",
    "\n",
    "plt.legend(loc='best');"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 获取数据¶\n",
    "CSV\n",
    "\n",
    "写给 csv 文件。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 89,
   "metadata": {},
   "outputs": [],
   "source": [
    "df.to_csv(\"foo.csv\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 90,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Unnamed: 0</th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2000-01-01</td>\n",
       "      <td>0.744773</td>\n",
       "      <td>-0.205604</td>\n",
       "      <td>0.839380</td>\n",
       "      <td>-0.488795</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2000-01-02</td>\n",
       "      <td>1.348746</td>\n",
       "      <td>0.610450</td>\n",
       "      <td>0.129965</td>\n",
       "      <td>0.572965</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2000-01-03</td>\n",
       "      <td>1.165531</td>\n",
       "      <td>1.705833</td>\n",
       "      <td>1.626404</td>\n",
       "      <td>0.495703</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2000-01-04</td>\n",
       "      <td>-0.484729</td>\n",
       "      <td>1.701581</td>\n",
       "      <td>0.014605</td>\n",
       "      <td>0.151848</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2000-01-05</td>\n",
       "      <td>-1.565003</td>\n",
       "      <td>-0.077028</td>\n",
       "      <td>0.601265</td>\n",
       "      <td>-0.219372</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>995</th>\n",
       "      <td>2002-09-22</td>\n",
       "      <td>-28.338652</td>\n",
       "      <td>32.490615</td>\n",
       "      <td>21.192947</td>\n",
       "      <td>-0.799968</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>996</th>\n",
       "      <td>2002-09-23</td>\n",
       "      <td>-27.866733</td>\n",
       "      <td>31.711817</td>\n",
       "      <td>20.945316</td>\n",
       "      <td>-1.590785</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>997</th>\n",
       "      <td>2002-09-24</td>\n",
       "      <td>-27.721489</td>\n",
       "      <td>32.360103</td>\n",
       "      <td>22.328668</td>\n",
       "      <td>0.052837</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>998</th>\n",
       "      <td>2002-09-25</td>\n",
       "      <td>-28.150661</td>\n",
       "      <td>33.010123</td>\n",
       "      <td>20.974735</td>\n",
       "      <td>0.888153</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>999</th>\n",
       "      <td>2002-09-26</td>\n",
       "      <td>-26.418902</td>\n",
       "      <td>31.516194</td>\n",
       "      <td>20.838913</td>\n",
       "      <td>1.179498</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>1000 rows × 5 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "     Unnamed: 0          A          B          C         D\n",
       "0    2000-01-01   0.744773  -0.205604   0.839380 -0.488795\n",
       "1    2000-01-02   1.348746   0.610450   0.129965  0.572965\n",
       "2    2000-01-03   1.165531   1.705833   1.626404  0.495703\n",
       "3    2000-01-04  -0.484729   1.701581   0.014605  0.151848\n",
       "4    2000-01-05  -1.565003  -0.077028   0.601265 -0.219372\n",
       "..          ...        ...        ...        ...       ...\n",
       "995  2002-09-22 -28.338652  32.490615  21.192947 -0.799968\n",
       "996  2002-09-23 -27.866733  31.711817  20.945316 -1.590785\n",
       "997  2002-09-24 -27.721489  32.360103  22.328668  0.052837\n",
       "998  2002-09-25 -28.150661  33.010123  20.974735  0.888153\n",
       "999  2002-09-26 -26.418902  31.516194  20.838913  1.179498\n",
       "\n",
       "[1000 rows x 5 columns]"
      ]
     },
     "execution_count": 90,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.read_csv(\"foo.csv\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 91,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Column1</th>\n",
       "      <th>Column2</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>a</td>\n",
       "      <td>art.一(个)；每一(个)</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>abandon</td>\n",
       "      <td>vt.丢弃；放弃，抛弃</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>ability</td>\n",
       "      <td>n.能力；能耐，本领</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>able</td>\n",
       "      <td>a.有能力的；出色的</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>abnormal</td>\n",
       "      <td>a.不正常的；变态的</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2627</th>\n",
       "      <td>numerous</td>\n",
       "      <td>a.为数众多的；许多</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2628</th>\n",
       "      <td>nurse</td>\n",
       "      <td>n.保姆；护士</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2629</th>\n",
       "      <td>nursery</td>\n",
       "      <td>n.托儿所；苗圃</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2630</th>\n",
       "      <td>nut</td>\n",
       "      <td>n.坚果，干果；螺母</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2631</th>\n",
       "      <td>nylon</td>\n",
       "      <td>n.尼龙，耐纶</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>2632 rows × 2 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "       Column1         Column2\n",
       "0            a  art.一(个)；每一(个)\n",
       "1      abandon     vt.丢弃；放弃，抛弃\n",
       "2      ability      n.能力；能耐，本领\n",
       "3         able      a.有能力的；出色的\n",
       "4     abnormal      a.不正常的；变态的\n",
       "...        ...             ...\n",
       "2627  numerous      a.为数众多的；许多\n",
       "2628     nurse         n.保姆；护士\n",
       "2629   nursery        n.托儿所；苗圃\n",
       "2630       nut      n.坚果，干果；螺母\n",
       "2631     nylon         n.尼龙，耐纶\n",
       "\n",
       "[2632 rows x 2 columns]"
      ]
     },
     "execution_count": 91,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import pandas as pd \n",
    "\n",
    "df = pd.read_csv('data.txt',encoding='utf8')\n",
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.10"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": true,
   "toc_window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
